package com.aspose.email.examples.email;
import com.aspose.email.MailMessage;
import com.aspose.email.SpamAnalyzer;
import com.aspose.email.examples.Utils;
public class BayesianSpamAnalyzer {
public static void main(String[] args) {
// The path to the resource directory.
String dataDir = Utils.getSharedDataDir(BayesianSpamAnalyzer.class) + "email/";
SpamFilterTest(dataDir);
}
public static void SpamFilterTest(String dataDir) {
String hamFolder = dataDir + "ham";
String spamFolder = dataDir + "spam";
String testFolder = dataDir + "test";
String dataBaseFile = dataDir + "SpamFilterDatabase.txt";
teachAndCreateDatabase(hamFolder, spamFolder, dataBaseFile);
java.io.File folder = new java.io.File(testFolder);
java.io.File[] testFiles = folder.listFiles();
SpamAnalyzer analyzer = new SpamAnalyzer(dataBaseFile);
for (int i = 0; i < testFiles.length; i++) {
MailMessage msg = MailMessage.load(testFiles[i].getAbsolutePath());
System.out.println(msg.getSubject());
double probability = analyzer.test(msg);
printResult(probability);
}
}
private static void teachAndCreateDatabase(String hamFolder, String spamFolder, String dataBaseFile) {
java.io.File folder = new java.io.File(hamFolder);
java.io.File[] hamFiles = folder.listFiles();
folder = new java.io.File(spamFolder);
java.io.File[] spamFiles = folder.listFiles();
SpamAnalyzer analyzer = new SpamAnalyzer();
for (int i = 0; i < hamFiles.length; i++) {
MailMessage hamMailMessage;
try {
hamMailMessage = MailMessage.load(hamFiles[i].getAbsolutePath());
} catch (Exception e) {
continue;
}
System.out.println(i);
analyzer.trainFilter(hamMailMessage, false);
}
for (int i = 0; i < spamFiles.length; i++) {
MailMessage spamMailMessage;
try {
spamMailMessage = MailMessage.load(spamFiles[i].getAbsolutePath());
} catch (Exception e) {
continue;
}
System.out.println(i);
analyzer.trainFilter(spamMailMessage, true);
}
analyzer.saveDatabase(dataBaseFile);
}
private static void printResult(double probability) {
if (probability < 0.05)
System.out.println("This is ham)");
else if (probability > 0.95)
System.out.println("This is spam)");
else
System.out.println("Maybe spam)");
}
}